package com.sxj.corejava.code08_常用类.String;

import java.util.Arrays;
import java.util.Scanner;

/**
 * @author 石小俊
 * @date 2024年04月03日 16:13
 */
public class Test06_练习 {

    private static Scanner sc = new Scanner(System.in);

    public static void main(String[] args) {
        test04();
    }

    /**
     * 1.控制台输入一个字符串,统计字符串包含多少个数字、英文字母以及其他字符
     */
    public static void test01() {
        System.out.print("请输入一个字符串:");
        String s = sc.next();
        // 将字符串中所有英文字母转换成大写
        s = s.toUpperCase();
        // 定义三个变量用于接收数字、英文字母、其他字符的数量
        int count1 = 0, count2 = 0, count3 = 0;
        // 遍历该字符串中所有字符
        for (int i = 0; i < s.length(); i++) {
            // 取出当前迭代的字符
            char c = s.charAt(i);
            if (c >= '0' && c <= '9') {
                count1++;
            } else if (c >= 'A' && c <= 'Z') {
                count2++;
            } else {
                count3++;
            }
        }
        System.out.println("字符串中包含" + count1 + "个数字," + count2 + "个英文字母," + count3 + "个其他字符");
    }

    /**
     * 2.控制台输入一个字符串,统计每个字母出现的次数(忽略大小写)并输出
     */
    public static void test02() {
        System.out.print("请输入一个字符串:");
        String s = sc.next();
        // 由于忽略大小写,将英文字母统一转换成大写
        s = s.toUpperCase();
        // 将字符串转换成字符数组
        char[] cs = s.toCharArray();
        // 通过遍历,遍历26个英文字母,将字符数组中的元素与这26个英文字母进行比较
        // 看每一个英文字母出现了几次
        for (char i = 'A'; i <= 'Z'; i++) {
            // 定义一个变量,接收当前元素出现的次数
            int count = 0;
            // 每遍历一个字符,将字符数组中每一个元素都比较一遍
            for (char c : cs) {
                // 判断字符数组中的每一个元素是否是当前遍历的字符
                // 如果是,则数量+1
                if (i == c) {
                    count++;
                }
            }
            // 每一个字符遍历完成之后,打印其出现的次数
            // 只打印出现过的字母
            if (count > 0) {
                System.out.println("字母" + i + "出现的次数为:" + count);
            }
        }

    }

    /**
     * 3.控制台输入一个字符串,对字符串中字符进行自然顺序的排序,将排序后的字符串展示出来
     */
    public static void test03() {
        System.out.print("请输入一个字符串:");
        String s = sc.next();
        // 将字符串转换成字符数组
        char[] cs = s.toCharArray();
        // 通过Arrays工具类中提供的排序方法自动排序
        Arrays.sort(cs);
        // 将排序后的字符数组转换成字符串
        String result = new String(cs);
        System.out.println("排序后的字符串为:" + result);
    }

    /**
     * 4.控制台输入两个字符串,计算第二个字符串在第一个字符串中出现的次数
     */
    public static void test04() {
        System.out.print("请输入第一个字符串:");
        String s = sc.next();
        System.out.print("请输入第二个字符串:");
        String s2 = sc.next();
        if (s.length() >= s2.length()) {
            // 定义一个变量,用于接收出现的次数
            int count = 0;
            // 定义一个变量,表示出现位置的索引号,便于截取字符串
            int index = 0;
            // 判断s2是否出现在s中
            while ((index = s.indexOf(s2)) != -1) {
                // 只要找到了,则出现次数+1
                count++;
                // 此时的index表示第一次出现的索引号
                // 截取时,需要将无效的部分与跟s2相同的部分都截取掉
                s = s.substring(index + s2.length());
            }
            System.out.println("第二个字符串在第一个字符串中出现的次数为:" + count);
        } else {
            System.out.println("第二个字符串没有在第一个字符串中出现");
        }
    }
}